package backing;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.swing.text.StyledEditorKit.BoldAction;

import dao.AbstractDAO;
import dao.ComponenteDAO;
import dao.DepartamentoDAO;
import dao.EquipamentoDAO;
import dao.MarcaDAO;
import dao.TipoDAO;

import to.Componente;
import to.ComponenteEquipamento;
import to.Departamento;
import to.Equipamento;
import to.Marca;
import to.TipoEquipamento;
import util.JSFUtil;

@ManagedBean
@ViewScoped
public class EquipamentoBacking {

	private Integer codComponenteSelecionado;
	private Integer codDepartamentoSelecionado;
	private Integer codTipoEquipamento;
	private Integer codMarcaSelecionada;

	private List<Componente> listaComponente;
	private List<TipoEquipamento> listaTipoEquipamento;
	private List<Departamento> listaDepartamento;
	private List<Marca> listaMarca;
	private List<ComponenteEquipamento> listaComponenteEquipamento;
	private List<Equipamento> listaEquipamento;

	private Boolean labelIp = Boolean.FALSE;
	private Boolean txtIp = Boolean.FALSE;

	ComponenteDAO compDAO = new ComponenteDAO();
	TipoDAO tDAO = new TipoDAO();
	DepartamentoDAO dDAO = new DepartamentoDAO();
	MarcaDAO mDAO = new MarcaDAO();
	AbstractDAO aDAO = new AbstractDAO();
	EquipamentoDAO equiDAO = new EquipamentoDAO();

	Equipamento eqSalvar = new Equipamento();
	ComponenteEquipamento ceSalvar = new ComponenteEquipamento();

	public EquipamentoBacking() {

		criaListaComponente();
		criaListaDepartamento();
		criaListaMarca();
		criaListaTipoEquipamento();
		criaListaEquipamento();

	}

	public void salvarEquipamento() {

		try {

			eqSalvar.setDepto(dDAO
					.buscaDepartamentoPorCodigo(codDepartamentoSelecionado));
			eqSalvar.setMarca(mDAO.buscaMarcaPorCodigo(codMarcaSelecionada));
			eqSalvar.setTipo(tDAO.buscaTipoPorCodigo(codTipoEquipamento));

			aDAO.saveOrUpdate(eqSalvar);
			JSFUtil.addInfoMessage("Equipamento salvo com sucesso!");

		} catch (Exception e) {
			e.printStackTrace();
			JSFUtil.addErrorMessage("ERROR ao salvar equipamento!");
		}

	}

	public void salvaComponente() {

		try {

			ceSalvar.setComponente(compDAO
					.buscaComponentePorCodigo(codComponenteSelecionado));
			ceSalvar.setEquipamento(eqSalvar);

			aDAO.saveOrUpdate(ceSalvar);
			listaComponenteEquipamento.add(ceSalvar);

			JSFUtil.addInfoMessage("Componente adicionado com sucesso!");

		} catch (Exception e) {
			e.printStackTrace();
			JSFUtil.addErrorMessage("ERRO ao salvar componente!");
		}

		limpaTelaCadComponente();
	}

	public void selecionaEquipamento(Equipamento eq) {

		eqSalvar = eq;
		codDepartamentoSelecionado = eqSalvar.getDepto().getId();
		codMarcaSelecionada = eqSalvar.getMarca().getId();
		codTipoEquipamento = eqSalvar.getTipo().getId();
		criaListaComponenteEquipamento(eqSalvar.getId());

	}

	public void reset() {

		eqSalvar = null;
		ceSalvar = null;
		codComponenteSelecionado = null;
		codDepartamentoSelecionado = null;
		codMarcaSelecionada = null;
		codTipoEquipamento = null;

		eqSalvar = new Equipamento();
		ceSalvar = new ComponenteEquipamento();

	}

	public void habilitaCampoIp() {

		TipoEquipamento tipoSelecionado = tDAO
				.buscaTipoPorCodigo(codTipoEquipamento);

		if (tipoSelecionado.getDescricao().equals("Computador")) {

			labelIp = Boolean.TRUE;
			txtIp = Boolean.TRUE;

		}else{
			
			labelIp = Boolean.FALSE;
			txtIp = Boolean.FALSE;
		}

	}

	public void limpaTelaCadComponente() {

		ceSalvar = null;
		codComponenteSelecionado = null;
		ceSalvar = new ComponenteEquipamento();

	}

	public void criaListaComponenteEquipamento(Integer codEquipamento) {

		listaComponenteEquipamento = new ArrayList<ComponenteEquipamento>(
				compDAO.listaComponenteEquipamento(codEquipamento));

		System.out.println("Quantidade de componententes: "
				+ listaComponenteEquipamento.size());

	}

	public void criaListaEquipamento() {

		listaEquipamento = new ArrayList<Equipamento>(
				equiDAO.listaTodosEquipamentos());

	}

	public void criaListaComponente() {

		listaComponente = new ArrayList<Componente>(compDAO.listaComponente());
	}

	public void criaListaDepartamento() {

		listaDepartamento = new ArrayList<Departamento>(
				dDAO.buscaTodosDepartamento());
	}

	public void criaListaTipoEquipamento() {

		listaTipoEquipamento = new ArrayList<TipoEquipamento>(
				tDAO.listaTipoEquipamento());

	}

	public void criaListaMarca() {

		listaMarca = new ArrayList<Marca>(mDAO.listaMarcas());
	}

	public List<Componente> getListaComponente() {
		return listaComponente;
	}

	public void setListaComponente(List<Componente> listaComponente) {
		this.listaComponente = listaComponente;
	}

	public List<TipoEquipamento> getListaTipoEquipamento() {
		return listaTipoEquipamento;
	}

	public void setListaTipoEquipamento(
			List<TipoEquipamento> listaTipoEquipamento) {
		this.listaTipoEquipamento = listaTipoEquipamento;
	}

	public List<Departamento> getListaDepartamento() {
		return listaDepartamento;
	}

	public void setListaDepartamento(List<Departamento> listaDepartamento) {
		this.listaDepartamento = listaDepartamento;
	}

	public List<Marca> getListaMarca() {
		return listaMarca;
	}

	public void setListaMarca(List<Marca> listaMarca) {
		this.listaMarca = listaMarca;
	}

	public Integer getCodComponenteSelecionado() {
		return codComponenteSelecionado;
	}

	public void setCodComponenteSelecionado(Integer codComponenteSelecionado) {
		this.codComponenteSelecionado = codComponenteSelecionado;
	}

	public Integer getCodDepartamentoSelecionado() {
		return codDepartamentoSelecionado;
	}

	public void setCodDepartamentoSelecionado(Integer codDepartamentoSelecionado) {
		this.codDepartamentoSelecionado = codDepartamentoSelecionado;
	}

	public Integer getCodTipoEquipamento() {
		return codTipoEquipamento;
	}

	public void setCodTipoEquipamento(Integer codTipoEquipamento) {
		this.codTipoEquipamento = codTipoEquipamento;
	}

	public Integer getCodMarcaSelecionada() {
		return codMarcaSelecionada;
	}

	public void setCodMarcaSelecionada(Integer codMarcaSelecionada) {
		this.codMarcaSelecionada = codMarcaSelecionada;
	}

	public Equipamento getEqSalvar() {
		return eqSalvar;
	}

	public void setEqSalvar(Equipamento eqSalvar) {
		this.eqSalvar = eqSalvar;
	}

	public ComponenteEquipamento getCeSalvar() {
		return ceSalvar;
	}

	public void setCeSalvar(ComponenteEquipamento ceSalvar) {
		this.ceSalvar = ceSalvar;
	}

	public List<ComponenteEquipamento> getListaComponenteEquipamento() {
		return listaComponenteEquipamento;
	}

	public void setListaComponenteEquipamento(
			List<ComponenteEquipamento> listaComponenteEquipamento) {
		this.listaComponenteEquipamento = listaComponenteEquipamento;
	}

	public List<Equipamento> getListaEquipamento() {
		return listaEquipamento;
	}

	public void setListaEquipamento(List<Equipamento> listaEquipamento) {
		this.listaEquipamento = listaEquipamento;
	}

	public Boolean getLabelIp() {
		return labelIp;
	}

	public void setLabelIp(Boolean labelIp) {
		this.labelIp = labelIp;
	}

	public Boolean getTxtIp() {
		return txtIp;
	}

	public void setTxtIp(Boolean txtIp) {
		this.txtIp = txtIp;
	}

}
